#ifndef PROTOCOL_H
#define PROTOCOL_H

#include "head.h"

// 协议魔数
#define MAGIC_NUMBER 0xA1B2C3D4

// 协议头长度
#define HEADER_LENGTH sizeof(protocol_header_t)

#define JWT_TOKEN_LENGTH 256 // JWT Token最大长度

// 命令类型枚举
typedef enum
{
    CMD_LOGIN_APPLY, // 登录请求
    CMD_LOGIN,       // 登录

    CMD_REGISTER_APPLY, // 注册请求
    CMD_REGISTER,       // 注册

    ERR_USER_EXISTS, // 用户名已存在

    CMD_LS,    // 列出文件
    CMD_CD,    // 改变目录
    CMD_PWD,   // 显示当前目录
    CMD_RMOVE, // 删除文件
    CMD_MKDIR, // 创建目录
    CMD_RMDIR, // 删除目录
    CMD_GETS,  // 下载文件
    CMD_PUTS,  // 上传文件

    CMD_ILLEGAL, // 不合法命令
    CMD_EXIT,    // 退出
} CommandType_e;

// 服务端响应的处理结果类型
typedef enum
{
    SUCESS,
    FAIL
} ResponseResults_e;

// 协议头结构
typedef struct protocol_header_s
{
    int magic;                   // 魔数
    int data_length;             // 后续数据长度
    CommandType_e command;       // 客户端发送的为命令类型
    ResponseResults_e resp_type; // 服务端处理结果
    // int request_id;           // 请求ID
    char token[JWT_TOKEN_LENGTH]; // JWT Token字段
} protocol_header_t;

#endif // PROTOCOL_H